package com.yugao.fintech.draper.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yugao.fintech.draper.admin.entity.SysMenu;
import com.yugao.fintech.draper.admin.param.MenuDTO;
import com.yugao.fintech.draper.core.model.TreeNode;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface MenuService extends IService<SysMenu> {

	/**
	 * 通过用户名查询用户权限信息
	 * @param username 用户名
	 * @return 权限信息
	 */
	Set<String> findUserPermissions(String username);

	/**
	 * 通过用户名创建对应的 Vue路由信息
	 * @param username 用户名
	 * @return 路由信息
	 */
	List<TreeNode<MenuDTO>> getUserRouters(String username);

	/**
	 * 获取全部的树形菜单信息(包括按钮)
	 * @return 树形菜单信息
	 */
	List<TreeNode<MenuDTO>> getAllMenuTree();

	/**
	 * 获取菜单下拉框
	 * @return 树形菜单下拉框
	 */
	List<TreeNode<MenuDTO>> getTreeSelect();

	/**
	 * 保存路由信息
	 * @param treeNode
	 */
	void saveMenu(TreeNode treeNode);

	/**
	 * 根据id查询路由信息
	 * @param id
	 * @return
	 */
	TreeNode<SysMenu> getMenuById(Long id);

	/**
	 * 更新路由
	 */
	void updateMenu(TreeNode treeNode);

	/**
	 * 获取用户路由以及权限信息
	 * @return 用户路由以及权限信息
	 */
	Map<String, Object> getUserRoutersAndAuthority();

	List<TreeNode<MenuDTO>> getUserMenuTree(Long userId);

	void removeById(Long id);

}
